/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package comportamientos;

import agentes.AgenteExtractor;
import jade.core.behaviours.DataStore;
import jade.domain.FIPAAgentManagement.FailureException;
import jade.domain.FIPAAgentManagement.NotUnderstoodException;
import jade.domain.FIPAAgentManagement.RefuseException;
import jade.lang.acl.ACLMessage;
import jade.lang.acl.MessageTemplate;
import jade.proto.ContractNetResponder;
import java.util.ArrayList;
import java.util.logging.Level;

/**
 *
 * @author hayner Benavides Moreno y Jorge Hernan Londoño Echeverri
 */
public class ComportamientoRecibir extends ContractNetResponder {

    //private int numeroDocumentos;
    private ArrayList<String> lista; // lista de docuemntos recibidos
    private AgenteExtractor extractor;
    //private DataStore store;

    public ComportamientoRecibir(AgenteExtractor a, MessageTemplate mt,DataStore store) {
        super(a, mt, store);
        
        extractor = a;
        lista = extractor.getDocumentos(); // referencia a la lista del agente       
        
    }
    /*
     * Metodo que envia la capacidad que tiene el agente para realizar la operación
     * dado en el númeor de docuemntos que tenga en cola.
     */
    @Override
    protected ACLMessage prepareResponse(ACLMessage cfp) throws NotUnderstoodException, RefuseException {
        ACLMessage mensaje = cfp.createReply();
        mensaje.setPerformative(ACLMessage.PROPOSE);
        try{
            extractor.setSucesoVentana("se ha hecho una petición para el servicio de extraccion por parte de "+cfp.getSender().getLocalName(),Level.INFO);
            mensaje.setContentObject(extractor.contarDocumentos());
        }catch(Exception exc){}
        return mensaje;
    }
    /*
     * Metodo usado en caso de ser aceptado la capacidad, en lo cual se recibe una lista de documentos
     */
    @Override
    protected ACLMessage prepareResultNotification(ACLMessage cfp, ACLMessage propose, ACLMessage accept) throws FailureException {
        ACLMessage mensaje = accept.createReply();
        try{
            ArrayList<String> listaDocs =(ArrayList<String>) accept.getContentObject();
           
            lista.addAll(listaDocs);  // se incluyen los nuevos documentos a la cola de trabajo del agnete
            extractor.setSucesoVentana("nuevos documentos se han incluido a la cola",Level.FINE);
        }
        catch(Exception e){
            
        }
        mensaje.setPerformative(ACLMessage.INFORM);
        mensaje.setContent("listo");// se indica que se termino de recibir la información de los documentos
        //ante la posibilidad de requerir mucho tiempo para la extracción estos solo son disponibles despues de un tiempo

        return mensaje;
    }

    @Override
    protected void handleRejectProposal(ACLMessage cfp, ACLMessage propose,    ACLMessage reject) {
        
    }

 
}
